addHook("MobjSpawn", function(mo)
	if not (mo.flags & MF_MISSILE) then return end
	if mo.type == MT_NAMECHECK then return end //buuuuuuuurp, why is *this* a missile anyways???
	//local s = mo.target
	//print(mo.target)
	mo.rfwdamage = mo.info.damage
	if mo.info.rfwdamage ~= nil then
		mo.rfwdamage = P_RandomRange(mo.info.rfwdamage, mo.info.rfwmaxdamage or mo.info.rfwdamage)
	elseif RFW.DAMAGETABLE[mo.type] then
		mo.rfwdamage = P_RandomRange(RFW.DAMAGETABLE[mo.type][1], RFW.DAMAGETABLE[mo.type][2] or RFW.DAMAGETABLE[mo.type][1])
	end
	//if not (s and s.valid and s.type == MT_PLAYER) then return end
	//mo.rfwdamage = FixedInt(FixedMul($*FU, s.player.weapon_multiplier))
	//mo.rfwblast_multi = s.player.weapon_multiplier
end)

function RFW.SFPDSfBs(s, t, angle, aim, flags) //RFW.StupidFuckingProjectileDegenerateScumfuckBullshit
	//local FUUUUCK = P_SPMAngle(s, t, angle, aim, flags) 
	local FUUUUCK = P_SpawnMobjFromMobj(s, 0, 0, s.height/2, t)
	if angle == nil then
		angle = s.angle
	end
	if aim == nil and s.type == MT_PLAYER then
		aim = s.player.aiming
	end
	FUUUUCK.angle = angle
	local speed = FUUUUCK.info.speed
	FUUUUCK.momx = FixedMul(FixedMul(speed, cos(angle)),cos(aim))
	FUUUUCK.momy = FixedMul(FixedMul(speed, sin(angle)),cos(aim))
	FUUUUCK.momz = FixedMul(speed, sin(aim))
	if FUUUUCK then
		FUUUUCK.target = s
		if not (FUUUUCK.flags & MF_MISSILE) then return end
		if FUUUUCK.type == MT_NAMECHECK then return end //buuuuuuuurp, why is *this* a missile anyways???
		local sr = FUUUUCK.target
		//print(FUUUUCK.target)
		FUUUUCK.rfwdamage = FUUUUCK.info.damage
		if FUUUUCK.info.rfwdamage ~= nil then
			FUUUUCK.rfwdamage = P_RandomRange(FUUUUCK.info.rfwdamage or 0, FUUUUCK.info.rfwmaxdamage or FUUUUCK.info.rfwdamage or 0)
		elseif RFW.DAMAGETABLE[FUUUUCK.type] then
			FUUUUCK.rfwdamage = P_RandomRange(RFW.DAMAGETABLE[FUUUUCK.type][1], RFW.DAMAGETABLE[FUUUUCK.type][2] or RFW.DAMAGETABLE[FUUUUCK.type][1])
		end
		if not (sr and sr.valid and sr.type == MT_PLAYER) then return FUUUUCK end
		FUUUUCK.rfwdamage = FixedInt(FixedMul($*FU, sr.player.weapon_multiplier))
		FUUUUCK.rfwblast_multi = sr.player.weapon_multiplier
	end
	return FUUUUCK
end